package com.example.tian.securityinspection.util;

import android.content.Context;

import com.example.tian.securityinspection.gen.DaoMaster;
import com.example.tian.securityinspection.gen.DaoSession;

import org.greenrobot.greendao.query.QueryBuilder;

/**
 * 1.创建数据库
 * 2.创建表
 * 3.增删改查
 * 4.对数据库的升级
 */
public class DaoManager {

    private static final String TAG = "DaoManager";
    //数据库名称
    private static final String DB_NAME = "mydb.sqlite";

    //多线程访问声明为单例模式
    private volatile static DaoManager manager;

    //初始化上下文
    private Context mContext;

    //它里边实际上是保存数据库的对象
    private static DaoMaster master;
    //创建数据库的工具
    private static DaoMaster.DevOpenHelper helper;
    //管理gen里生成的所有Dao对象  里边带有基本的增删改查的方法
    private static DaoSession session;

    private DaoManager(){

    }

    /**
     *   初始化上下文 创建数据库的时候使用
     */
    public void init(Context context){
        this.mContext = context;
    }

    /**
     * 单例模式获得操作数据库对象
     * @return
     */
    public static DaoManager getInstance(){
        if (manager == null){
            synchronized (DaoManager.class){
                if (manager == null){
                    manager = new DaoManager();
                }
            }
        }
        return manager;
    }

    /**
     * 判断是否存在数据库,如果没有则创建数据库
     *
     * 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时，删除所有的表，意味着这将导致数据的丢失。
     * 所以，在正式的项目中，你还应该做一层封装，来实现数据库的安全升级。
     */
    public DaoMaster getMaster() {
        if (master == null){
            helper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
            master = new DaoMaster(helper.getWritableDatabase());
        }
        return master;
    }

    /**
     * 完成对数据库的 增删改查, 这里仅仅是一个接口
     */
    public  DaoSession getSession() {
        if (session == null){
            if (master == null){
                master = getMaster();
            }
            session = master.newSession();
        }
        return session;
    }

    /**
     * 打开输出日志的操作,默认的是关闭的
     */
    public void setDeBug(){
        QueryBuilder.LOG_SQL = true;
        QueryBuilder.LOG_VALUES = true;
    }

    /**
     * 关闭所有的操作, 数据库开启后,使用完毕后要关闭
     */
    public void closeConnections(){

    }

    private void closeSession(){
        if (session != null){
            session.clear();
            session = null;
        }
    }

    private void closeHelper(){
        if (helper != null){
            helper.close();
            helper = null;
        }
    }

}
